Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
589173ac
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
589173ac
编写于
12月 21, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reuse the same instances of MonarchStackElement up to a certain depth
上级
36972d22
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
66 addition
and
16 deletion
+66
-16
src/vs/editor/common/modes/monarch/monarchLexer.ts
src/vs/editor/common/modes/monarch/monarchLexer.ts
+66
-16
未找到文件。
src/vs/editor/common/modes/monarch/monarchLexer.ts
浏览文件 @
589173ac
...
...
@@ -17,19 +17,69 @@ import { Token } from 'vs/editor/common/core/token';
import
{
NullState
,
nullTokenize
,
NULL_MODE_ID
}
from
'
vs/editor/common/modes/nullMode
'
;
import
{
ModeTransition
}
from
'
vs/editor/common/core/modeTransition
'
;
export
class
MonarchStateStackElement
{
/**
* Reuse the same stack elements up to a certain depth.
*/
export
class
MonarchStackElementFactory
{
private
static
_INSTANCE
=
new
MonarchStackElementFactory
(
5
);
public
static
create
(
parent
:
MonarchStackElement
,
state
:
string
):
MonarchStackElement
{
return
this
.
_INSTANCE
.
create
(
parent
,
state
);
}
private
readonly
_maxCacheDepth
:
number
;
private
readonly
_entries
:
{
[
stackElementId
:
string
]:
MonarchStackElement
;
};
constructor
(
maxCacheDepth
:
number
)
{
this
.
_maxCacheDepth
=
maxCacheDepth
;
this
.
_entries
=
Object
.
create
(
null
);
}
public
create
(
parent
:
MonarchStackElement
,
state
:
string
):
MonarchStackElement
{
if
(
parent
!==
null
&&
parent
.
depth
>=
this
.
_maxCacheDepth
)
{
return
new
MonarchStackElement
(
parent
,
state
);
}
let
stackElementId
=
MonarchStackElementFactory
.
_getStackElementId
(
parent
);
if
(
stackElementId
.
length
>
0
)
{
stackElementId
+=
'
|
'
;
}
stackElementId
+=
state
;
let
result
=
this
.
_entries
[
stackElementId
];
if
(
result
)
{
return
result
;
}
result
=
new
MonarchStackElement
(
parent
,
state
);
this
.
_entries
[
stackElementId
]
=
result
;
return
result
;
}
private
static
_getStackElementId
(
element
:
MonarchStackElement
):
string
{
let
result
=
''
;
while
(
element
!==
null
)
{
if
(
result
.
length
>
0
)
{
result
+=
'
|
'
;
}
result
+=
element
.
state
;
element
=
element
.
parent
;
}
return
result
;
}
}
export
class
MonarchStackElement
{
public
readonly
parent
:
MonarchSta
teSta
ckElement
;
public
readonly
parent
:
MonarchStackElement
;
public
readonly
state
:
string
;
public
readonly
depth
:
number
;
constructor
(
parent
:
MonarchSta
teSta
ckElement
,
state
:
string
)
{
constructor
(
parent
:
MonarchStackElement
,
state
:
string
)
{
this
.
parent
=
parent
;
this
.
state
=
state
;
this
.
depth
=
(
this
.
parent
?
this
.
parent
.
depth
:
0
)
+
1
;
}
private
static
_equals
(
a
:
MonarchSta
teStackElement
,
b
:
MonarchState
StackElement
):
boolean
{
private
static
_equals
(
a
:
MonarchSta
ckElement
,
b
:
Monarch
StackElement
):
boolean
{
while
(
a
!==
null
&&
b
!==
null
)
{
if
(
a
===
b
)
{
return
true
;
...
...
@@ -46,15 +96,15 @@ export class MonarchStateStackElement {
return
false
;
}
public
equals
(
other
:
MonarchSta
teSta
ckElement
):
boolean
{
return
MonarchSta
teSta
ckElement
.
_equals
(
this
,
other
);
public
equals
(
other
:
MonarchStackElement
):
boolean
{
return
MonarchStackElement
.
_equals
(
this
,
other
);
}
public
push
(
state
:
string
):
MonarchSta
teSta
ckElement
{
return
new
MonarchStateStackElement
(
this
,
state
);
public
push
(
state
:
string
):
MonarchStackElement
{
return
MonarchStackElementFactory
.
create
(
this
,
state
);
}
public
pop
():
MonarchSta
teSta
ckElement
{
public
pop
():
MonarchStackElement
{
return
this
.
parent
;
}
...
...
@@ -72,28 +122,28 @@ export class MonarchStateStackElement {
}
}
public
popall
():
MonarchSta
teSta
ckElement
{
let
result
:
MonarchSta
teSta
ckElement
=
this
;
public
popall
():
MonarchStackElement
{
let
result
:
MonarchStackElement
=
this
;
while
(
result
.
parent
)
{
result
=
result
.
parent
;
}
return
result
;
}
public
switchTo
(
state
:
string
):
MonarchSta
teSta
ckElement
{
return
new
MonarchStateStackElement
(
this
.
parent
,
state
);
public
switchTo
(
state
:
string
):
MonarchStackElement
{
return
MonarchStackElementFactory
.
create
(
this
.
parent
,
state
);
}
}
export
class
MonarchLineState
implements
modes
.
IState
{
private
readonly
_modeId
:
string
;
public
readonly
stack
:
MonarchSta
teSta
ckElement
;
public
readonly
stack
:
MonarchStackElement
;
public
readonly
embeddedModeState
:
modes
.
IState
;
constructor
(
modeId
:
string
,
stack
:
MonarchSta
teSta
ckElement
,
stack
:
MonarchStackElement
,
embeddedModeState
:
modes
.
IState
)
{
if
(
!
stack
)
{
...
...
@@ -159,7 +209,7 @@ export class MonarchTokenizer implements modes.ITokenizationSupport {
}
public
getInitialState
():
modes
.
IState
{
let
rootState
=
new
MonarchStateStackElement
(
null
,
this
.
_lexer
.
start
);
let
rootState
=
MonarchStackElementFactory
.
create
(
null
,
this
.
_lexer
.
start
);
return
new
MonarchLineState
(
this
.
_modeId
,
rootState
,
null
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录