Add constants and qualified type names to lexer, and use instruction schema to decode UIB instrctions

This commit is contained in:
Yoshi Askharoun
2024-02-11 20:38:19 -06:00
parent 03f8974ac1
commit 4056dc9f4f
9 changed files with 216 additions and 106 deletions
+31 -31
View File
@@ -119,31 +119,31 @@ internal static class InstructionSet
[OpCode.ReturnValue] = [],
[OpCode.ReturnVoid] = [],
[OpCode.ConstructObject] = Inst_UInt16,
[OpCode.ConstructObject] = [LiteralDataType.TypeIndex],
[OpCode.ConstructObjectIndirect] = Inst_UInt16,
[OpCode.InitializeInstance] = Inst_UInt16,
[OpCode.LookupSymbol] = Inst_UInt16,
[OpCode.WriteSymbol] = Inst_UInt16,
[OpCode.WriteSymbolPeek] = Inst_UInt16,
[OpCode.ClearSymbol] = Inst_UInt16,
[OpCode.PropertyInitialize] = Inst_UInt16,
[OpCode.PropertyInitializeIndirect] = Inst_UInt16,
[OpCode.PropertyListAdd] = Inst_UInt16,
[OpCode.PropertyAssign] = Inst_UInt16,
[OpCode.PropertyAssignStatic] = Inst_UInt16,
[OpCode.PropertyGet] = Inst_UInt16,
[OpCode.PropertyGetPeek] = Inst_UInt16,
[OpCode.PropertyGetStatic] = Inst_UInt16,
[OpCode.MethodInvoke] = Inst_UInt16,
[OpCode.MethodInvokePeek] = Inst_UInt16,
[OpCode.MethodInvokeStatic] = Inst_UInt16,
[OpCode.MethodInvokePushLastParam] = Inst_UInt16,
[OpCode.MethodInvokeStaticPushLastParam] = Inst_UInt16,
[OpCode.VerifyTypeCast] = Inst_UInt16,
[OpCode.IsCheck] = Inst_UInt16,
[OpCode.As] = Inst_UInt16,
[OpCode.TypeOf] = Inst_UInt16,
[OpCode.PushConstant] = Inst_UInt16,
[OpCode.InitializeInstance] = [LiteralDataType.TypeIndex],
[OpCode.LookupSymbol] = [LiteralDataType.SymbolRefIndex],
[OpCode.WriteSymbol] = [LiteralDataType.SymbolRefIndex],
[OpCode.WriteSymbolPeek] = [LiteralDataType.SymbolRefIndex],
[OpCode.ClearSymbol] = [LiteralDataType.SymbolRefIndex],
[OpCode.PropertyInitialize] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyInitializeIndirect] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyListAdd] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyAssign] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyAssignStatic] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyGet] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyGetPeek] = [LiteralDataType.PropertyIndex],
[OpCode.PropertyGetStatic] = [LiteralDataType.PropertyIndex],
[OpCode.MethodInvoke] = [LiteralDataType.MethodIndex],
[OpCode.MethodInvokePeek] = [LiteralDataType.MethodIndex],
[OpCode.MethodInvokeStatic] = [LiteralDataType.MethodIndex],
[OpCode.MethodInvokePushLastParam] = [LiteralDataType.MethodIndex],
[OpCode.MethodInvokeStaticPushLastParam] = [LiteralDataType.MethodIndex],
[OpCode.VerifyTypeCast] = [LiteralDataType.TypeIndex],
[OpCode.IsCheck] = [LiteralDataType.TypeIndex],
[OpCode.As] = [LiteralDataType.TypeIndex],
[OpCode.TypeOf] = [LiteralDataType.TypeIndex],
[OpCode.PushConstant] = [LiteralDataType.ConstantIndex],
[OpCode.ConstructListenerStorage] = Inst_UInt16,
[OpCode.JumpIfFalse] = Inst_UInt32,
@@ -154,16 +154,16 @@ internal static class InstructionSet
[OpCode.EnterDebugState] = [LiteralDataType.Int32],
[OpCode.ConstructObjectParam] = Inst_UInt16x2,
[OpCode.ConstructFromString] = Inst_UInt16x2,
[OpCode.PropertyDictionaryAdd] = Inst_UInt16x2,
[OpCode.ConvertType] = Inst_UInt16x2,
[OpCode.ConstructObjectParam] = [LiteralDataType.TypeIndex, LiteralDataType.UInt16],
[OpCode.ConstructFromString] = [LiteralDataType.TypeIndex, LiteralDataType.ConstantIndex],
[OpCode.PropertyDictionaryAdd] = [LiteralDataType.TypeIndex, LiteralDataType.ConstantIndex],
[OpCode.ConvertType] = [LiteralDataType.TypeIndex, LiteralDataType.TypeIndex],
[OpCode.JumpIfDictionaryContains] = [LiteralDataType.UInt16, LiteralDataType.UInt16, LiteralDataType.UInt32],
[OpCode.JumpIfDictionaryContains] = [LiteralDataType.PropertyIndex, LiteralDataType.UInt16, LiteralDataType.UInt32],
[OpCode.ConstructFromBinary] = [LiteralDataType.UInt16, LiteralDataType.Bytes],
[OpCode.ConstructFromBinary] = [LiteralDataType.TypeIndex, LiteralDataType.Bytes],
[OpCode.Operation] = [LiteralDataType.UInt16, LiteralDataType.Byte],
[OpCode.Operation] = [LiteralDataType.OpHostIndex, LiteralDataType.Byte],
[OpCode.Listen] = [LiteralDataType.UInt16, LiteralDataType.Byte, LiteralDataType.UInt16, LiteralDataType.UInt32],
[OpCode.DestructiveListen] = [LiteralDataType.UInt16, LiteralDataType.Byte, LiteralDataType.UInt16, LiteralDataType.UInt32, LiteralDataType.UInt32],