Strings 19

This commit is contained in:
nazrin 2025-06-05 20:12:29 +00:00
parent 10c44eab2e
commit eec0a94aac
15 changed files with 358 additions and 55 deletions

View file

@ -4,6 +4,7 @@ import clox.compiler;
import clox.chunk;
import clox.scanner;
import clox.value;
import clox.object;
alias ParseFn = void function(Compiler* compiler);
@ -52,13 +53,22 @@ private void binary(Compiler* compiler){
}
}
private void literal(Compiler* compiler){
switch(compiler.parser.previous.type){
Token token = compiler.parser.previous;
compiler.emitter.setLine(token.line);
switch(token.type){
case Token.Type.True: compiler.emitter.emit(OpCode.True); break;
case Token.Type.False: compiler.emitter.emit(OpCode.False); break;
case Token.Type.Nil: compiler.emitter.emit(OpCode.Nil); break;
default: assert(0);
}
}
private void strlit(Compiler* compiler) @nogc{
Token token = compiler.parser.previous;
string str = token.lexeme[1 .. $-1];
Obj.String* strObj = Obj.String.copy(str);
compiler.emitter.setLine(token.line);
compiler.emitter.emitConstant(Value.str(strObj));
}
struct ParseRule{
ParseFn prefix;
@ -104,7 +114,7 @@ immutable ParseRule[Token.Type.max+1] rules = [
Token.Type.Less : ParseRule(null, &binary, Precedence.Comparison),
Token.Type.LessEqual : ParseRule(null, &binary, Precedence.Comparison),
Token.Type.Identifier : ParseRule(null, null, Precedence.None),
Token.Type.String : ParseRule(null, null, Precedence.None),
Token.Type.String : ParseRule(&strlit, null, Precedence.None),
Token.Type.Number : ParseRule(&number, null, Precedence.None),
Token.Type.And : ParseRule(null, null, Precedence.None),
Token.Type.Class : ParseRule(null, null, Precedence.None),