Browse Source

Some minor updates in serialization code. (to be continued...)

Stan Hebben 6 years ago
parent
commit
91f3c18cdf

+ 21
- 20
ModuleDeserializer/src/main/java/org/openzen/zenscript/moduledeserializer/CodeReader.java View File

58
 import org.openzen.zenscript.codemodel.statement.SwitchStatement;
58
 import org.openzen.zenscript.codemodel.statement.SwitchStatement;
59
 import org.openzen.zenscript.codemodel.statement.ThrowStatement;
59
 import org.openzen.zenscript.codemodel.statement.ThrowStatement;
60
 import org.openzen.zenscript.codemodel.statement.VarStatement;
60
 import org.openzen.zenscript.codemodel.statement.VarStatement;
61
+import org.openzen.zenscript.codemodel.statement.VariableID;
61
 import org.openzen.zenscript.codemodel.statement.WhileStatement;
62
 import org.openzen.zenscript.codemodel.statement.WhileStatement;
62
-import org.openzen.zenscript.codemodel.type.ArrayTypeID;
63
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
63
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
64
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
64
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
65
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
65
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
70
 import org.openzen.zenscript.codemodel.type.member.BuiltinID;
70
 import org.openzen.zenscript.codemodel.type.member.BuiltinID;
71
 import org.openzen.zenscript.codemodel.type.member.TypeMembers;
71
 import org.openzen.zenscript.codemodel.type.member.TypeMembers;
72
 import org.openzen.zenscript.codemodel.type.storage.StaticExpressionStorageTag;
72
 import org.openzen.zenscript.codemodel.type.storage.StaticExpressionStorageTag;
73
+import org.openzen.zenscript.codemodel.type.storage.StorageTag;
73
 import org.openzen.zenscript.codemodel.type.storage.UniqueStorageTag;
74
 import org.openzen.zenscript.codemodel.type.storage.UniqueStorageTag;
74
 import org.openzen.zenscript.moduleserialization.CodePositionEncoding;
75
 import org.openzen.zenscript.moduleserialization.CodePositionEncoding;
75
 import org.openzen.zenscript.moduleserialization.ExpressionEncoding;
76
 import org.openzen.zenscript.moduleserialization.ExpressionEncoding;
249
 	public AnnotationDefinition readAnnotationType() {
250
 	public AnnotationDefinition readAnnotationType() {
250
 		return annotations[readUInt()];
251
 		return annotations[readUInt()];
251
 	}
252
 	}
252
-
253
+	
253
 	@Override
254
 	@Override
254
 	public TypeID deserializeTypeID(TypeContext context) {
255
 	public TypeID deserializeTypeID(TypeContext context) {
255
 		int type = input.readVarUInt();
256
 		int type = input.readVarUInt();
290
 				return BasicTypeID.UNDETERMINED;
291
 				return BasicTypeID.UNDETERMINED;
291
 			case TypeEncoding.TYPE_DEFINITION: {
292
 			case TypeEncoding.TYPE_DEFINITION: {
292
 				HighLevelDefinition definition = readDefinition();
293
 				HighLevelDefinition definition = readDefinition();
293
-				TypeID[] arguments = new TypeID[definition.typeParameters.length];
294
+				StoredType[] arguments = new StoredType[definition.typeParameters.length];
294
 				for (int i = 0; i < arguments.length; i++)
295
 				for (int i = 0; i < arguments.length; i++)
295
-					arguments[i] = deserializeTypeID(context);
296
+					arguments[i] = deserializeType(context);
296
 				return registry.getForDefinition(definition, arguments);
297
 				return registry.getForDefinition(definition, arguments);
297
 			}
298
 			}
298
 			case TypeEncoding.TYPE_DEFINITION_INNER: {
299
 			case TypeEncoding.TYPE_DEFINITION_INNER: {
299
 				DefinitionTypeID outer = (DefinitionTypeID)deserializeTypeID(context);
300
 				DefinitionTypeID outer = (DefinitionTypeID)deserializeTypeID(context);
300
 				HighLevelDefinition definition = readDefinition();
301
 				HighLevelDefinition definition = readDefinition();
301
-				TypeID[] arguments = new TypeID[definition.typeParameters.length];
302
+				StoredType[] arguments = new StoredType[definition.typeParameters.length];
302
 				for (int i = 0; i < arguments.length; i++)
303
 				for (int i = 0; i < arguments.length; i++)
303
-					arguments[i] = deserializeTypeID(context);
304
+					arguments[i] = deserializeStoredType(context);
304
 				return registry.getForDefinition(definition, arguments, outer);
305
 				return registry.getForDefinition(definition, arguments, outer);
305
 			}
306
 			}
306
 			case TypeEncoding.TYPE_GENERIC:
307
 			case TypeEncoding.TYPE_GENERIC:
335
 			}
336
 			}
336
 			case TypeEncoding.TYPE_OPTIONAL:
337
 			case TypeEncoding.TYPE_OPTIONAL:
337
 				return registry.getOptional(deserializeTypeID(context));
338
 				return registry.getOptional(deserializeTypeID(context));
338
-			case TypeEncoding.TYPE_CONST:
339
-				return registry.getModified(OptionalTypeID.MODIFIER_CONST, deserializeTypeID(context));
340
-			case TypeEncoding.TYPE_IMMUTABLE:
341
-				return registry.getModified(OptionalTypeID.MODIFIER_IMMUTABLE, deserializeTypeID(context));
342
 			default:
339
 			default:
343
 				throw new IllegalArgumentException("Unknown type: " + type);
340
 				throw new IllegalArgumentException("Unknown type: " + type);
344
 		}
341
 		}
396
 		if ((flags & FunctionHeaderEncoding.FLAG_THROWS) > 0)
393
 		if ((flags & FunctionHeaderEncoding.FLAG_THROWS) > 0)
397
 			thrownType = deserializeType(inner);
394
 			thrownType = deserializeType(inner);
398
 		
395
 		
396
+		StorageTag storage = null;
397
+		if ((flags & FunctionHeaderEncoding.FLAG_STORAGE) > 0)
398
+			storage = deserializeStorage();
399
+		
399
 		FunctionParameter[] parameters = FunctionParameter.NONE;
400
 		FunctionParameter[] parameters = FunctionParameter.NONE;
400
 		if ((flags & FunctionHeaderEncoding.FLAG_PARAMETERS) > 0) {
401
 		if ((flags & FunctionHeaderEncoding.FLAG_PARAMETERS) > 0) {
401
 			parameters = new FunctionParameter[readUInt()];
402
 			parameters = new FunctionParameter[readUInt()];
415
 				}
416
 				}
416
 			}
417
 			}
417
 		}
418
 		}
418
-		return new FunctionHeader(typeParameters, returnType, thrownType, parameters);
419
+		return new FunctionHeader(typeParameters, returnType, thrownType, storage, parameters);
419
 	}
420
 	}
420
 	
421
 	
421
 	@Override
422
 	@Override
480
 
481
 
481
 	@Override
482
 	@Override
482
 	public CallArguments deserializeArguments(StatementContext context) {
483
 	public CallArguments deserializeArguments(StatementContext context) {
483
-		TypeID[] typeArguments = new TypeID[readUInt()];
484
+		StoredType[] typeArguments = new StoredType[readUInt()];
484
 		for (int i = 0; i < typeArguments.length; i++)
485
 		for (int i = 0; i < typeArguments.length; i++)
485
-			typeArguments[i] = deserializeTypeID(context);
486
+			typeArguments[i] = deserializeType(context);
486
 		
487
 		
487
 		Expression[] arguments = new Expression[readUInt()];
488
 		Expression[] arguments = new Expression[readUInt()];
488
 		for (int i = 0; i < arguments.length; i++)
489
 		for (int i = 0; i < arguments.length; i++)
536
 				VarStatement[] loopVariables = new VarStatement[iterator.getLoopVariableCount()];
537
 				VarStatement[] loopVariables = new VarStatement[iterator.getLoopVariableCount()];
537
 				for (int i = 0; i < loopVariables.length; i++) {
538
 				for (int i = 0; i < loopVariables.length; i++) {
538
 					String name = ((flags & StatementEncoding.FLAG_NAME) > 0) ? readString() : null;
539
 					String name = ((flags & StatementEncoding.FLAG_NAME) > 0) ? readString() : null;
539
-					loopVariables[i] = new VarStatement(position, name, iterator.types[i], null, true);
540
+					loopVariables[i] = new VarStatement(position, new VariableID(), name, iterator.types[i], null, true);
540
 				}
541
 				}
541
 				ForeachStatement loop = new ForeachStatement(position, loopVariables, iterator, list);
542
 				ForeachStatement loop = new ForeachStatement(position, loopVariables, iterator, list);
542
 				StatementContext inner = new StatementContext(context, loop);
543
 				StatementContext inner = new StatementContext(context, loop);
591
 				StoredType varType = deserializeType(context);
592
 				StoredType varType = deserializeType(context);
592
 				String name = (flags & StatementEncoding.FLAG_NAME) > 0 ? readString() : null;
593
 				String name = (flags & StatementEncoding.FLAG_NAME) > 0 ? readString() : null;
593
 				Expression initializer = deserializeExpression(context);
594
 				Expression initializer = deserializeExpression(context);
594
-				VarStatement result = new VarStatement(position, name, varType, initializer, (flags & StatementEncoding.FLAG_FINAL) > 0);
595
+				VarStatement result = new VarStatement(position, new VariableID(), name, varType, initializer, (flags & StatementEncoding.FLAG_FINAL) > 0);
595
 				context.add(result);
596
 				context.add(result);
596
 				return result;
597
 				return result;
597
 			}
598
 			}
637
 				Expression target = deserializeExpression(context);
638
 				Expression target = deserializeExpression(context);
638
 				FunctionalMemberRef member = (FunctionalMemberRef)readMember(context, target.type);
639
 				FunctionalMemberRef member = (FunctionalMemberRef)readMember(context, target.type);
639
 				CallArguments arguments = deserializeArguments(context);
640
 				CallArguments arguments = deserializeArguments(context);
640
-				FunctionHeader instancedHeader = member.getHeader().instanceForCall(registry, arguments);
641
+				FunctionHeader instancedHeader = member.getHeader().instanceForCall(position, registry, arguments);
641
 				return new CallExpression(position, target, member, instancedHeader, arguments);
642
 				return new CallExpression(position, target, member, instancedHeader, arguments);
642
 			}
643
 			}
643
 			case ExpressionEncoding.TYPE_CALL_STATIC: {
644
 			case ExpressionEncoding.TYPE_CALL_STATIC: {
644
 				TypeID type = deserializeTypeID(context);
645
 				TypeID type = deserializeTypeID(context);
645
 				FunctionalMemberRef member = (FunctionalMemberRef)readMember(context, type.stored(StaticExpressionStorageTag.INSTANCE));
646
 				FunctionalMemberRef member = (FunctionalMemberRef)readMember(context, type.stored(StaticExpressionStorageTag.INSTANCE));
646
 				CallArguments arguments = deserializeArguments(context);
647
 				CallArguments arguments = deserializeArguments(context);
647
-				FunctionHeader instancedHeader = member.getHeader().instanceForCall(registry, arguments);
648
+				FunctionHeader instancedHeader = member.getHeader().instanceForCall(position, registry, arguments);
648
 				return new CallStaticExpression(position, type, member, instancedHeader, arguments);
649
 				return new CallStaticExpression(position, type, member, instancedHeader, arguments);
649
 			}
650
 			}
650
 			case ExpressionEncoding.TYPE_CAPTURED_CLOSURE: {
651
 			case ExpressionEncoding.TYPE_CAPTURED_CLOSURE: {
792
 				TypeID type = deserializeTypeID(context);
793
 				TypeID type = deserializeTypeID(context);
793
 				return new IsExpression(position, value, type);
794
 				return new IsExpression(position, value, type);
794
 			}
795
 			}
795
-			case ExpressionEncoding.TYPE_MAKE_CONST: {
796
+			/*case ExpressionEncoding.TYPE_MAKE_CONST: {
796
 				Expression value = deserializeExpression(context);
797
 				Expression value = deserializeExpression(context);
797
-				StoredType constType = registry.getModified(OptionalTypeID.MODIFIER_CONST, value.type.type).stored(value.type.getActualStorage());
798
+				StoredType constType = registry.get(OptionalTypeID.MODIFIER_CONST, value.type.type).stored(value.type.getActualStorage());
798
 				return new MakeConstExpression(position, value, constType);
799
 				return new MakeConstExpression(position, value, constType);
799
-			}
800
+			}*/
800
 			case ExpressionEncoding.TYPE_MAP: {
801
 			case ExpressionEncoding.TYPE_MAP: {
801
 				StoredType type = deserializeType(context);
802
 				StoredType type = deserializeType(context);
802
 				Expression[] keys = new Expression[readUInt()];
803
 				Expression[] keys = new Expression[readUInt()];

+ 1
- 0
ModuleSerializationShared/src/main/java/org/openzen/zenscript/moduleserialization/FunctionHeaderEncoding.java View File

18
 	public static final int FLAG_PARAMETERS = 8;
18
 	public static final int FLAG_PARAMETERS = 8;
19
 	public static final int FLAG_VARIADIC = 16;
19
 	public static final int FLAG_VARIADIC = 16;
20
 	public static final int FLAG_DEFAULT_VALUES = 32;
20
 	public static final int FLAG_DEFAULT_VALUES = 32;
21
+	public static final int FLAG_STORAGE = 64;
21
 }
22
 }

+ 0
- 2
ModuleSerializationShared/src/main/java/org/openzen/zenscript/moduleserialization/TypeEncoding.java View File

41
 	public static final int TYPE_RANGE = 26;
41
 	public static final int TYPE_RANGE = 26;
42
 	public static final int TYPE_ITERATOR = 27;
42
 	public static final int TYPE_ITERATOR = 27;
43
 	public static final int TYPE_OPTIONAL = 28;
43
 	public static final int TYPE_OPTIONAL = 28;
44
-	public static final int TYPE_CONST = 29;
45
-	public static final int TYPE_IMMUTABLE = 30;
46
 }
44
 }

Loading…
Cancel
Save