X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/4f3e597ca9a1d3e5ff9e7831c55f32500917d7d7..7613908db708653c43cc3c2ca3defbfeb6b4fc6a:/Syntax.hpp diff --git a/Syntax.hpp b/Syntax.hpp index 4a93e03..5b74e43 100644 --- a/Syntax.hpp +++ b/Syntax.hpp @@ -1,5 +1,5 @@ -/* Cycript - Optimizing JavaScript Compiler/Runtime - * Copyright (C) 2009-2015 Jay Freeman (saurik) +/* Cycript - The Truly Universal Scripting Language + * Copyright (C) 2009-2016 Jay Freeman (saurik) */ /* GNU Affero General Public License, Version 3 {{{ */ @@ -1485,6 +1485,20 @@ struct CYResolveMember : virtual void Output(CYOutput &out, CYFlags flags) const; }; +struct CYSubscriptMember : + CYMember +{ + CYSubscriptMember(CYExpression *object, CYExpression *property) : + CYMember(object, property) + { + } + + CYPrecedence(1) + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out, CYFlags flags) const; +}; + namespace cy { namespace Syntax { @@ -2058,6 +2072,20 @@ struct CYTypeCharacter : virtual void Output(CYOutput &out) const; }; +struct CYTypeInt128 : + CYTypeSpecifier +{ + CYTypeSigning signing_; + + CYTypeInt128(CYTypeSigning signing) : + signing_(signing) + { + } + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out) const; +}; + struct CYTypeIntegral : CYTypeSpecifier { @@ -2112,12 +2140,19 @@ struct CYTypeVoid : virtual void Output(CYOutput &out) const; }; +enum CYTypeReferenceKind { + CYTypeReferenceStruct, + CYTypeReferenceEnum, +}; + struct CYTypeReference : CYTypeSpecifier { + CYTypeReferenceKind kind_; CYIdentifier *name_; - CYTypeReference(CYIdentifier *name) : + CYTypeReference(CYTypeReferenceKind kind, CYIdentifier *name) : + kind_(kind), name_(name) { } @@ -2161,7 +2196,7 @@ struct CYTypeModifier : CYTarget *Replace(CYContext &context, CYTarget *type); virtual void Output(CYOutput &out, CYIdentifier *identifier) const = 0; - void Output(CYOutput &out, int precedence, CYIdentifier *identifier) const; + void Output(CYOutput &out, int precedence, CYIdentifier *identifier, bool space) const; virtual CYTypeFunctionWith *Function() { return NULL; } }; @@ -2282,7 +2317,7 @@ struct CYTypedParameter : { CYTypedIdentifier *typed_; - CYTypedParameter(CYTypedIdentifier *typed, CYTypedParameter *next) : + CYTypedParameter(CYTypedIdentifier *typed, CYTypedParameter *next = NULL) : CYNext(next), typed_(typed) { @@ -2391,13 +2426,31 @@ struct CYImportDeclaration : virtual void Output(CYOutput &out, CYFlags flags) const; }; -struct CYExternal : +struct CYExternalExpression : + CYTarget +{ + CYString *abi_; + CYTypedIdentifier *typed_; + + CYExternalExpression(CYString *abi, CYTypedIdentifier *typed) : + abi_(abi), + typed_(typed) + { + } + + CYPrecedence(0) + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out, CYFlags flags) const; +}; + +struct CYExternalDefinition : CYStatement { CYString *abi_; CYTypedIdentifier *typed_; - CYExternal(CYString *abi, CYTypedIdentifier *typed) : + CYExternalDefinition(CYString *abi, CYTypedIdentifier *typed) : abi_(abi), typed_(typed) { @@ -2539,6 +2592,38 @@ struct CYStructDefinition : virtual void Output(CYOutput &out, CYFlags flags) const; }; +struct CYEnumConstant : + CYNext +{ + CYIdentifier *name_; + CYNumber *value_; + + CYEnumConstant(CYIdentifier *name, CYNumber *value, CYEnumConstant *next = NULL) : + CYNext(next), + name_(name), + value_(value) + { + } +}; + +struct CYTypeEnum : + CYTypeSpecifier +{ + CYIdentifier *name_; + CYTypeSpecifier *specifier_; + CYEnumConstant *constants_; + + CYTypeEnum(CYIdentifier *name, CYTypeSpecifier *specifier, CYEnumConstant *constants) : + name_(name), + specifier_(specifier), + constants_(constants) + { + } + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out) const; +}; + namespace cy { namespace Syntax {