(* doLiteral - *) PROCEDURE doLiteral (n: node) ; VAR s: String ; BEGIN assert (isLiteral (n)) ; s := keyToCharStar (getSymName (n)) ; IF n^.literalF.type=charN THEN IF DynamicStrings.char (s, -1)='C' THEN s := DynamicStrings.Slice (DynamicStrings.Mark (s), 0, -1) ; IF DynamicStrings.char (s, 0)#'0' THEN s := DynamicStrings.ConCat (InitString('0'), DynamicStrings.Mark (s)) END END ; outText ("(char) ") END ; outTextS (s) ; s := KillString (s) END doLiteral ; (* isString - returns TRUE if node, n, is a string. *) PROCEDURE isString (n: node) : BOOLEAN ; BEGIN assert (n#NIL) ; RETURN n^.kind=string END isString ; (* doString - *) PROCEDURE doString (n: node) ; VAR s: String ; BEGIN assert (isString (n)) ; s := keyToCharStar (getSymName (n)) ; IF DynamicStrings.Index (s, '"')=-1 THEN outText ('"') ; outTextS (s) ; outText ('"') ELSIF DynamicStrings.Index (s, "'")=-1 THEN outText ('"') ; outTextS (s) ; outText ('"') ELSE metaError1 ('illegal string {%1k}', n) END END doString ;