require "core.k"

//@ \\section{Module PRIMITIVE-TYPES}
module <name>PRIMITIVE-TYPES</name>
    imports <name>CORE</name>
syntax K ::= "bitCount" "(" Type ")" <attribute>[function]</attribute>
syntax K ::= <func-dec>func</func-dec> <func-dec>(</func-dec> K <func-dec>,</func-dec> K <func-dec>)</func-dec>
syntax <error>error</error>

rule 'Byte(.KList) => <func-call>byte</func-call>      <attribute>[structural, anywhere]</attribute>

rule <name>[StartExecutionPhase]:</name>
    <cell><k></cell> . =>
      'ExprStm('Invoke('TypeName(String2Id(<var>MainClassS</var>)),, String2Id("main")))
    <cell></k></cell>
    <cell><mainClass></cell> ListItem(<var>MainClassS</var><colon>:</colon><type>String</type>) <cell></mainClass></cell>
    <cell><globalPhase></cell> <func-call>ElaborationPhase</func-call> => <func-call>ExecutionPhase</func-call>  <cell></globalPhase></cell>
    <cell><nextLoc></cell> <var>L</var>:<type>Int</type> => <var>L</var> +Int 1 <cell></nextLoc></cell>

rule <name>[ContinueLabeledNotMatch]:</name>
    (<func-call>whileLabel</func-call>(<var>LabelK</var>:K) => .) ~> 'Continue('Some(<var>X</var>:Id)) ~> (<func-call>whileImpl</func-call>(_,_) => .)
when <var>LabelK</var> =/=K <var>X</var>