Skip to content

Commit

Permalink
Implemented support for using namespace
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.code.sf.net/p/angelscript/code/trunk@2995 404ce1b2-830e-0410-a2e2-b09542c77caf
  • Loading branch information
angelcode committed Feb 16, 2025
1 parent b384237 commit 5eb665e
Show file tree
Hide file tree
Showing 19 changed files with 989 additions and 430 deletions.
613 changes: 432 additions & 181 deletions sdk/angelscript/source/as_builder.cpp

Large diffs are not rendered by default.

29 changes: 17 additions & 12 deletions sdk/angelscript/source/as_builder.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
AngelCode Scripting Library
Copyright (c) 2003-2024 Andreas Jonsson
Copyright (c) 2003-2025 Andreas Jonsson
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
Expand Down Expand Up @@ -179,15 +179,15 @@ class asCBuilder
int ValidateDefaultArgs(asCScriptCode *script, asCScriptNode *node, asCScriptFunction *func);
asCString GetCleanExpressionString(asCScriptNode *n, asCScriptCode *file);

asSNameSpace *GetNameSpaceFromNode(asCScriptNode *node, asCScriptCode *script, asSNameSpace *implicitNs, asCScriptNode **next, asCObjectType **objType = 0);
asSNameSpace *GetNameSpaceFromNode(asCScriptNode *node, asCScriptCode *script, asSNameSpace *implicitNs, asCScriptNode **next, asCObjectType **objType = 0, bool *isExplicitNs = 0);
asSNameSpace *GetNameSpaceByString(const asCString &nsName, asSNameSpace *implicitNs, asCScriptNode *errNode, asCScriptCode *script, asCTypeInfo **scopeType = 0, bool isRequired = true);
asCString GetScopeFromNode(asCScriptNode *n, asCScriptCode *script, asCScriptNode **next = 0);

asCTypeInfo *GetType(const char *type, asSNameSpace *ns, asCObjectType *parentType);
asCObjectType *GetObjectType(const char *type, asSNameSpace *ns);
asCFuncdefType *GetFuncDef(const char *type, asSNameSpace *ns, asCObjectType *parentType);
asCTypeInfo *GetTypeFromTypesKnownByObject(const char *type, asCObjectType *currentType);
asCDataType CreateDataTypeFromNode(asCScriptNode *node, asCScriptCode *file, asSNameSpace *implicitNamespace, bool acceptHandleForScope = false, asCObjectType *currentType = 0, bool reportError = true, bool *isValid = 0, asCArray<asCDataType> *templateSubType = 0);
asCDataType CreateDataTypeFromNode(asCScriptNode *node, asCScriptCode *file, asSNameSpace *implicitNamespace, bool acceptHandleForScope = false, asCObjectType *currentType = 0, bool reportError = true, bool *isValid = 0, asCArray<asCDataType> *templateSubType = 0, asCArray<asSNameSpace*>* scopeVisibleNamespaces = 0);
asCObjectType *GetTemplateInstanceFromNode(asCScriptNode *node, asCScriptCode *file, asCObjectType *templateType, asSNameSpace *implicitNamespace, asCObjectType *currentType, asCScriptNode **next = 0);
asCDataType ModifyDataTypeFromNode(const asCDataType &type, asCScriptNode *node, asCScriptCode *file, asETypeModifiers *inOutFlag, bool *autoHandle);

Expand All @@ -203,7 +203,7 @@ class asCBuilder
friend class asCCompiler;

int CheckForConflictsDueToDefaultArgs(asCScriptCode *script, asCScriptNode *node, asCScriptFunction *func, asCObjectType *objType);
int GetNamespaceAndNameFromNode(asCScriptNode *n, asCScriptCode *script, asSNameSpace *implicitNs, asSNameSpace *&outNs, asCString &outName);
int GetNamespaceAndNameFromNode(asCScriptNode *n, asCScriptCode *script, asSNameSpace *implicitNs, asSNameSpace *&outNs, asCString &outName, bool *isExplicitNs = 0);
int RegisterMixinClass(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
sMixinClass *GetMixinClass(const char *name, asSNameSpace *ns);
void IncludePropertiesFromMixins(sClassDeclaration *decl);
Expand All @@ -216,6 +216,7 @@ class asCBuilder
int RegisterVirtualProperty(asCScriptNode *node, asCScriptCode *file, asCObjectType *object = 0, bool isInterface = false, bool isGlobalFunction = false, asSNameSpace *ns = 0, bool isExistingShared = false);
int RegisterImportedFunction(int funcID, asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
int RegisterGlobalVar(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
int RegisterUsingNamespace(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
int RegisterClass(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
int RegisterInterface(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
int RegisterEnum(asCScriptNode *node, asCScriptCode *file, asSNameSpace *ns);
Expand All @@ -234,6 +235,9 @@ class asCBuilder
int CreateVirtualFunction(asCScriptFunction *func, int idx);
void ParseScripts();
void RegisterTypesFromScript(asCScriptNode *node, asCScriptCode *script, asSNameSpace *ns);
void RegisterNamespaceVisibility(asCScriptNode *node, asCScriptCode *script, asSNameSpace *ns);
void AddVisibleNamespaces(asSNameSpace *ns, const asCArray<asSNameSpace*>& visited, asCArray<asSNameSpace*>& pending);
asSNameSpace *FindNextVisibleNamespace(const asCArray<asSNameSpace*>& visited, asCArray<asSNameSpace*>& pending, asSNameSpace *parentNs, bool* checkAmbiguous = 0);
void RegisterNonTypesFromScript(asCScriptNode *node, asCScriptCode *script, asSNameSpace *ns);
void CompileFunctions();
void CompileGlobalVariables();
Expand All @@ -247,14 +251,15 @@ class asCBuilder
void EvaluateTemplateInstances(asUINT startIdx, bool keepSilent);
void CleanupEnumValues();

asCArray<asCScriptCode *> scripts;
asCArray<sFunctionDescription *> functions;
asCSymbolTable<sGlobalVariableDescription> globVariables;
asCArray<sClassDeclaration *> classDeclarations;
asCArray<sClassDeclaration *> interfaceDeclarations;
asCArray<sClassDeclaration *> namedTypeDeclarations;
asCArray<sFuncDef *> funcDefs;
asCArray<sMixinClass *> mixinClasses;
asCArray<asCScriptCode *> scripts;
asCArray<sFunctionDescription *> functions;
asCSymbolTable<sGlobalVariableDescription> globVariables;
asCMap<asSNameSpace*, asCArray<asSNameSpace*>> namespaceVisibility;
asCArray<sClassDeclaration *> classDeclarations;
asCArray<sClassDeclaration *> interfaceDeclarations;
asCArray<sClassDeclaration *> namedTypeDeclarations;
asCArray<sFuncDef *> funcDefs;
asCArray<sMixinClass *> mixinClasses;

// For use with the DoesTypeExists() method
bool hasCachedKnownTypes;
Expand Down
Loading

0 comments on commit 5eb665e

Please sign in to comment.