| |
| |
| (* |
| 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 ; |