use common type widget / cesyms libdprase line nbr

This commit is contained in:
Basile Burg 2015-03-12 18:40:27 +01:00
parent 83087766bf
commit 28b29e7b74
2 changed files with 34 additions and 35 deletions

View File

@ -92,6 +92,7 @@ enum SymbolType
_alias, _alias,
_class, _class,
_enum, _enum,
_error,
_function, _function,
_interface, _interface,
_import, _import,
@ -100,14 +101,13 @@ enum SymbolType
_template, _template,
_union, _union,
_variable, _variable,
_error,
_warning _warning
} }
struct Symbol struct Symbol
{ {
int line; size_t line;
int col; size_t col;
string name; string name;
SymbolType type; SymbolType type;
Symbol * [] subs; Symbol * [] subs;
@ -162,8 +162,8 @@ class SymbolListBuilder : ASTVisitor
static void astError(string fname, size_t line, size_t col, string msg, bool isErr) static void astError(string fname, size_t line, size_t col, string msg, bool isErr)
{ {
Symbol * newSym = construct!Symbol; Symbol * newSym = construct!Symbol;
newSym.col = cast(int) col; newSym.col = col;
newSym.line = cast(int) line; newSym.line = line;
newSym.name = msg; newSym.name = msg;
isErr ? newSym.type = SymbolType._error : newSym.type = SymbolType._warning; isErr ? newSym.type = SymbolType._error : newSym.type = SymbolType._warning;
illFormed ~= newSym; illFormed ~= newSym;
@ -205,13 +205,13 @@ class SymbolListBuilder : ASTVisitor
count++; count++;
auto result = construct!Symbol; auto result = construct!Symbol;
result.name = adt.name.text; result.name = adt.name.text;
result.line = cast(int) adt.name.line; result.line = adt.name.line;
result.col = cast(int) adt.name.column; result.col = adt.name.column;
parent.subs ~= result; parent.subs ~= result;
return result; return result;
} }
assert(0, "addDeclaration no implemented for " ~ DT.stringof); version(none) assert(0, "addDeclaration no implemented for " ~ DT.stringof);
} }
/// visitor implementation if the declarator is based on a Token named "name". /// visitor implementation if the declarator is based on a Token named "name".
@ -235,15 +235,14 @@ class SymbolListBuilder : ASTVisitor
count++; count++;
auto result = construct!Symbol; auto result = construct!Symbol;
result.name = name; result.name = name;
result.line = cast(int) line; result.line = line;
result.col = cast(int) col; result.col = col;
result.type = st; result.type = st;
parent.subs ~= result; parent.subs ~= result;
} }
final override void visit(const AliasDeclaration decl) final override void visit(const AliasDeclaration decl)
{ {
// old alias syntax not supported by this method
// why is initializers an array ? // why is initializers an array ?
if (decl.initializers.length > 0) if (decl.initializers.length > 0)
namedVisitorImpl!(AliasInitializer, SymbolType._alias)(decl.initializers[0]); namedVisitorImpl!(AliasInitializer, SymbolType._alias)(decl.initializers[0]);

View File

@ -16,6 +16,7 @@ type
_alias, _alias,
_class, _class,
_enum, _enum,
_error,
_function, _function,
_interface, _interface,
_import, _import,
@ -24,7 +25,6 @@ type
_template, _template,
_union, _union,
_variable, _variable,
_error,
_warning _warning
); );
@ -33,14 +33,14 @@ type
// Encapsulates a symbol to enable structured serialization // Encapsulates a symbol to enable structured serialization
TSymbol = class(TCollectionItem) TSymbol = class(TCollectionItem)
private private
fline, fCol: integer; fline, fCol: nativeUint;
fName: string; fName: string;
fType: TSymbolType; fType: TSymbolType;
fSubs: TSymbolCollection; fSubs: TSymbolCollection;
procedure setSubs(aValue: TSymbolCollection); procedure setSubs(aValue: TSymbolCollection);
published published
property line: Integer read fline write fLine; property line: nativeUint read fline write fLine;
property col: Integer read fCol write fCol; property col: nativeUint read fCol write fCol;
property name: string read fName write fName; property name: string read fName write fName;
property symType: TSymbolType read fType write fType; property symType: TSymbolType read fType write fType;
property subs: TSymbolCollection read fSubs write setSubs; property subs: TSymbolCollection read fSubs write setSubs;
@ -49,7 +49,7 @@ type
destructor destroy; override; destructor destroy; override;
end; end;
// Encapsulates a ssymbol ub symbols. // Encapsulates a the sub symbols.
TSymbolCollection = class(TCollection) TSymbolCollection = class(TCollection)
private private
function getSub(index: Integer): TSymbol; function getSub(index: Integer): TSymbol;
@ -58,7 +58,7 @@ type
property sub[index: Integer]: TSymbol read getSub; default; property sub[index: Integer]: TSymbol read getSub; default;
end; end;
// Serializable Symbol list // Serializable symbol list
TSymbolList = class(TComponent) TSymbolList = class(TComponent)
private private
fSymbols: TSymbolCollection; fSymbols: TSymbolCollection;
@ -522,7 +522,7 @@ end;
procedure TCESymbolListWidget.TreeDeletion(Sender: TObject; Node: TTreeNode); procedure TCESymbolListWidget.TreeDeletion(Sender: TObject; Node: TTreeNode);
begin begin
if (node.Data <> nil) then if (node.Data <> nil) then
Dispose(PInt64(node.Data)); Dispose(PNativeUint(node.Data));
end; end;
procedure TCESymbolListWidget.btnRefreshClick(Sender: TObject); procedure TCESymbolListWidget.btnRefreshClick(Sender: TObject);
@ -615,13 +615,13 @@ end;
procedure TCESymbolListWidget.TreeDblClick(Sender: TObject); procedure TCESymbolListWidget.TreeDblClick(Sender: TObject);
var var
line: Int64; line: NativeUint;
begin begin
if fDoc = nil then exit; if fDoc = nil then exit;
if Tree.Selected = nil then exit; if Tree.Selected = nil then exit;
if Tree.Selected.Data = nil then exit; if Tree.Selected.Data = nil then exit;
// //
line := PInt64(Tree.Selected.Data)^; line := PNativeUInt(Tree.Selected.Data)^;
fDoc.CaretY := line; fDoc.CaretY := line;
fDoc.SelectLine; fDoc.SelectLine;
end; end;
@ -702,13 +702,13 @@ end;
// //
procedure symbolToTreeNode(origin: TTreenode; sym: TSymbol); procedure symbolToTreeNode(origin: TTreenode; sym: TSymbol);
var var
data: PInt64; data: PNativeUint;
cat: TTreeNode; cat: TTreeNode;
node: TTreeNode; node: TTreeNode;
i: Integer; i: Integer;
begin begin
cat := getCatNode(origin, sym.symType); cat := getCatNode(origin, sym.symType);
data := new(PInt64); data := new(PNativeUint);
data^ := sym.fline; data^ := sym.fline;
node := tree.Items.AddChildObject(cat, sym.name, data); node := tree.Items.AddChildObject(cat, sym.name, data);
if not fShowChildCategories then node := nil; if not fShowChildCategories then node := nil;