xpcomcore-rubygem 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/Rakefile +2 -0
  2. data/VERSION +1 -1
  3. data/ext/stub_runners/darwin/StubApp.app/Contents/Info.plist +32 -0
  4. data/ext/stub_runners/darwin/StubApp.app/Contents/MacOS/stub_runner +0 -0
  5. data/ext/stub_runners/darwin/StubApp.app/Contents/PkgInfo +1 -0
  6. data/ext/stub_runners/darwin/StubApp.app/Contents/Resources/.gitignore +0 -0
  7. data/ext/stub_runners/darwin/src/Makefile +7 -0
  8. data/ext/stub_runners/darwin/src/stub_runner.c +19 -0
  9. data/lib/xpcomcore-rubygem/building/stub_app_helpers.rb +61 -0
  10. data/lib/xpcomcore-rubygem/commands/generate/application.rb +17 -1
  11. data/lib/xpcomcore-rubygem/commands/launch.rb +98 -49
  12. data/lib/xpcomcore-rubygem/tasks/application_task.rb +13 -3
  13. data/templates/application/chrome/content/xul/main_window.xul.erb +1 -1
  14. data/templates/application/chrome/icons/default/default.png +0 -0
  15. data/templates/shared/xultestrunner_test_task.erb +7 -7
  16. data/xpcomcore/Rakefile +3 -3
  17. data/xpcomcore/build_properties.yml +1 -1
  18. data/xpcomcore/components/XPCOMCore.js +1 -1
  19. data/xpcomcore/components/XPCOMCoreCLH.js +28 -0
  20. data/xpcomcore/doc/files.html +1 -1
  21. data/xpcomcore/doc/index.html +1 -1
  22. data/xpcomcore/doc/symbols/_global_.html +1 -1
  23. data/xpcomcore/doc/symbols/error.html +1 -1
  24. data/xpcomcore/doc/symbols/file.html +1 -1
  25. data/xpcomcore/doc/symbols/file.nosuchfileerror.html +1 -1
  26. data/xpcomcore/doc/symbols/kernel.html +44 -1
  27. data/xpcomcore/doc/symbols/loaderror.html +1 -1
  28. data/xpcomcore/doc/symbols/selfconcepterror.html +1 -1
  29. data/xpcomcore/doc/symbols/src/lib_kernel.js.html +159 -149
  30. data/xpcomcore/doc/symbols/sys.html +1 -1
  31. data/xpcomcore/doc/symbols/xpcbuiltins.html +1 -1
  32. data/xpcomcore/lib/kernel.js +11 -1
  33. data/xpcomcore-rubygem.gemspec +17 -2
  34. metadata +31 -2
@@ -53,7 +53,7 @@
53
53
  <span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mixinScope</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
54
54
  <span class='line'> 47</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - figure out a better way than this object jammed in here to special case our</span><span class="WHIT">
55
55
  <span class='line'> 48</span> </span><span class="WHIT"> </span><span class="COMM">// methods we really want to be calling getters when they're mixed in.</span><span class="WHIT">
56
- <span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callingGetters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">'$CURRENT_FILE'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">defaultArgs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'$CURRENT_DIRECTORY'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">defaultArgs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
56
+ <span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callingGetters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">'$CURRENT_FILE'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">defaultArgs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'$CURRENT_DIRECTORY'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">defaultArgs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'$ARGV'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
57
57
  <span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">makeGetter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">attr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">myPrototype</span><span class="PUNC">[</span><span class="NAME">attr</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
58
58
  <span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">makeCallingGetter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">attr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">argsArray</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
59
59
  <span class='line'> 52</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
@@ -100,151 +100,161 @@
100
100
  <span class='line'> 93</span> */</span><span class="WHIT">
101
101
  <span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">$Cu</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Components.utils</span><span class="PUNC">,</span><span class="WHIT">
102
102
  <span class='line'> 95</span> </span><span class="WHIT">
103
- <span class='line'> 96</span> </span><span class="COMM">/**
104
- <span class='line'> 97</span> * Taking inspiration from Ruby, this defines the set of paths to check when
105
- <span class='line'> 98</span> * trying to load a file via either {@link Kernel#load} or {@link Kernel#require}.
106
- <span class='line'> 99</span> * @type Array
107
- <span class='line'>100</span> */</span><span class="WHIT">
108
- <span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">$LOAD_PATH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">XPCOMCoreConfig.getProperty</span><span class="PUNC">(</span><span class="STRN">'libRoot'</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
109
- <span class='line'>102</span>
110
- <span class='line'>103</span> </span><span class="WHIT"> </span><span class="COMM">/**
111
- <span class='line'>104</span> * Taking inspiration from Ruby, this defines the currently loaded files that
112
- <span class='line'>105</span> * have been loaded through {@link Kernel#require}.
113
- <span class='line'>106</span> * @type Array
114
- <span class='line'>107</span> */</span><span class="WHIT">
115
- <span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">$LOADED_FEATURES</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"kernel.js"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
116
- <span class='line'>109</span> </span><span class="WHIT">
117
- <span class='line'>110</span> </span><span class="COMM">/**
118
- <span class='line'>111</span> * Taking inspiration from Ruby, this method tries to determine the filesystem path to
119
- <span class='line'>112</span> * the caller code of this method.
120
- <span class='line'>113</span> * NOTE - when {@link Kernel} is mixed into an object, this function gets mixed in via
121
- <span class='line'>114</span> * a special case behaviour that makes it a getter that actually calls the function
122
- <span class='line'>115</span> * rather than returning the function object itself. This is to facilitate being able
123
- <span class='line'>116</span> * to call '$CURRENT_FILE' in your code rather than '$CURRENT_FILE()'. The stackTraversalDepth
124
- <span class='line'>117</span> * parameter is there for this reason, since we need to traverse the stack further than
125
- <span class='line'>118</span> * normal to find the calling scope than we normally would.
126
- <span class='line'>119</span> * @returns {String} The path to the current file
127
- <span class='line'>120</span> * @param {int} stackTraversalDepth Optional argument, how far to look up the stack to
128
- <span class='line'>121</span> * figure out who called us. The default is usually safe.
129
- <span class='line'>122</span> * @throws {SelfConceptError} Thrown when we can't figure out what the filesystem
130
- <span class='line'>123</span> * path to the current file is.
131
- <span class='line'>124</span> */</span><span class="WHIT">
132
- <span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">$CURRENT_FILE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
133
- <span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
134
- <span class='line'>127</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
135
- <span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ioService</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/network/io-service;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">$Ci.nsIIOService</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
136
- <span class='line'>129</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - UGH. This is so seedy.</span><span class="WHIT">
137
- <span class='line'>130</span> </span><span class="WHIT"> </span><span class="COMM">// Traverse up the stack as far as needed to get our caller's stack frame. Sometimes we need to</span><span class="WHIT">
138
- <span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">// traverse more than one level up, like when this function is actually called from a getter</span><span class="WHIT">
139
- <span class='line'>132</span> </span><span class="WHIT"> </span><span class="COMM">// property that references it.</span><span class="WHIT">
140
- <span class='line'>133</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callerStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Components.stack</span><span class="PUNC">;</span><span class="WHIT">
141
- <span class='line'>134</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
142
- <span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">callerStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">callerStack.caller</span><span class="PUNC">;</span><span class="WHIT">
143
- <span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
144
- <span class='line'>137</span> </span><span class="WHIT"> </span><span class="COMM">// Split based on the stupid fucking " -> " Gecko puts in the filename and get the last entry</span><span class="WHIT">
145
- <span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ostensiblyUs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">callerStack.filename.split</span><span class="PUNC">(</span><span class="STRN">" -> "</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">slice</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
146
- <span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callerFileURI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ioService.newURI</span><span class="PUNC">(</span><span class="NAME">ostensiblyUs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
147
- <span class='line'>140</span> </span><span class="WHIT"> </span><span class="COMM">// QI for an nsIFileURL which lets us get a handle on an actual file attribute and automagically does</span><span class="WHIT">
148
- <span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">// resource: URL resolution for us</span><span class="WHIT">
149
- <span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">callerFileURI.QueryInterface</span><span class="PUNC">(</span><span class="NAME">$Ci.nsIFileURL</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
150
- <span class='line'>143</span> </span><span class="WHIT"> </span><span class="COMM">// And theoretically, we can now get a handle on an nsIFile and return the path of that.</span><span class="WHIT">
151
- <span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">callerFileURI.file.path</span><span class="PUNC">;</span><span class="WHIT">
152
- <span class='line'>145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
153
- <span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SelfConceptError</span><span class="PUNC">(</span><span class="STRN">"The filesystem location of the current file could not be determined. -- "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
154
- <span class='line'>147</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
155
- <span class='line'>148</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
156
- <span class='line'>149</span> </span><span class="WHIT">
157
- <span class='line'>150</span> </span><span class="COMM">/**
158
- <span class='line'>151</span> * This method tries to determine the filesystem path to parent directory of the caller
159
- <span class='line'>152</span> * code of this method NOTE - see the note on $CURRENT_FILE, as the same applies here.
160
- <span class='line'>153</span> * @returns {String} The path to the current directory
161
- <span class='line'>154</span> * @param {int} stackTraversalDepth Optional argument, how far to look up the stack to
162
- <span class='line'>155</span> * figure out who called us. The default is usually safe.
163
- <span class='line'>156</span> * @throws {SelfConceptError} Thrown when we can't figure out what the filesystem
164
- <span class='line'>157</span> * path to the parent directory of the current file is.
165
- <span class='line'>158</span> */</span><span class="WHIT">
166
- <span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">$CURRENT_DIRECTORY</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
167
- <span class='line'>160</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
168
- <span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentFilePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Kernel.prototype.$CURRENT_FILE</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
169
- <span class='line'>162</span> </span><span class="WHIT">
170
- <span class='line'>163</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">XPCBuiltins.nsILocalFile</span><span class="PUNC">(</span><span class="NAME">currentFilePath</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
171
- <span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">file.parent.path</span><span class="PUNC">;</span><span class="WHIT">
172
- <span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
173
- <span class='line'>166</span> </span><span class="WHIT">
174
- <span class='line'>167</span> </span><span class="COMM">/**
175
- <span class='line'>168</span> * Returns a reference to an object allowing for get()/set() on environment variables.
176
- <span class='line'>169</span> * @type nsIEnvironment
177
- <span class='line'>170</span> */</span><span class="WHIT">
178
- <span class='line'>171</span> </span><span class="WHIT">
179
- <span class='line'>172</span> </span><span class="NAME">$ENV</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Components.classes</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/process/environment;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">Components.interfaces.nsIEnvironment</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
180
- <span class='line'>173</span> </span><span class="WHIT">
181
- <span class='line'>174</span> </span><span class="COMM">/**
182
- <span class='line'>175</span> * Prints a string to standard out, without a trailing newline.
183
- <span class='line'>176</span> * @param {String} str String to print to standard out.
184
- <span class='line'>177</span> */</span><span class="WHIT">
185
- <span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
186
- <span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">dump</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
187
- <span class='line'>180</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
188
- <span class='line'>181</span> </span><span class="WHIT">
189
- <span class='line'>182</span> </span><span class="COMM">/**
190
- <span class='line'>183</span> * Prints a string to standard out, with a trailing newline.
191
- <span class='line'>184</span> * @param {String} str String to print to standard out.
192
- <span class='line'>185</span> */</span><span class="WHIT">
193
- <span class='line'>186</span> </span><span class="WHIT"> </span><span class="NAME">puts</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
194
- <span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
195
- <span class='line'>188</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
196
- <span class='line'>189</span> </span><span class="WHIT">
197
- <span class='line'>190</span> </span><span class="COMM">/**
198
- <span class='line'>191</span> * Searches {@link Kernel#$LOAD_PATH} for files to load into the current global scope.
199
- <span class='line'>192</span> * Files loaded via this method will not be added to {@link Kernel#$LOADED_FEATURES} and hence
200
- <span class='line'>193</span> * can be repeatedly loaded and executed.
201
- <span class='line'>194</span> * @param {String} featurePath Full or relative path including file extension to try and load.
202
- <span class='line'>195</span> * @returns {Boolean} True if the file was loaded succesfully
203
- <span class='line'>196</span> * @throws {LoadError} Thrown when we can't find the specified file in any directories specified
204
- <span class='line'>197</span> * in {@link Kernel#$LOAD_PATH}.
205
- <span class='line'>198</span> */</span><span class="WHIT">
206
- <span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">load</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
207
- <span class='line'>200</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/moz/jssubscript-loader;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">$Ci.mozIJSSubScriptLoader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
208
- <span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">foundFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
209
- <span class='line'>202</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - so this is kinda shitty. We have an empty entry here so we default to just trying to load </span><span class="WHIT">
210
- <span class='line'>203</span> </span><span class="WHIT"> </span><span class="COMM">// from an absolute path</span><span class="WHIT">
211
- <span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$LOAD_PATH.concat</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">""</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
212
- <span class='line'>205</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadPathLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadPath.length</span><span class="PUNC">;</span><span class="WHIT">
213
- <span class='line'>206</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - mozilla bug here. if i use foreach on array it ignores the granted security privileges</span><span class="WHIT">
214
- <span class='line'>207</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">loadPathLength</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
215
- <span class='line'>208</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">potentialFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/file/local;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">createInstance</span><span class="PUNC">(</span><span class="NAME">$Ci.nsILocalFile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
216
- <span class='line'>209</span> </span><span class="WHIT"> </span><span class="NAME">potentialFile.initWithPath</span><span class="PUNC">(</span><span class="NAME">loadPath</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
217
- <span class='line'>210</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">potentialFile.exists</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
218
- <span class='line'>211</span> </span><span class="NAME">foundFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">potentialFile</span><span class="PUNC">;</span><span class="WHIT">
219
- <span class='line'>212</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
220
- <span class='line'>213</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
221
- <span class='line'>214</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
222
- <span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">foundFile</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
223
- <span class='line'>216</span> </span><span class="WHIT"> </span><span class="NAME">foundFile.normalize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
224
- <span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">loader.loadSubScript</span><span class="PUNC">(</span><span class="STRN">"file://"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">encodeURI</span><span class="PUNC">(</span><span class="NAME">foundFile.path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
225
- <span class='line'>218</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
226
- <span class='line'>219</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
227
- <span class='line'>220</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">LoadError</span><span class="PUNC">(</span><span class="STRN">"no such file to load -- "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
228
- <span class='line'>221</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
229
- <span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
230
- <span class='line'>223</span>
231
- <span class='line'>224</span> </span><span class="WHIT"> </span><span class="COMM">/**
232
- <span class='line'>225</span> * Searches {@link Kernel#$LOAD_PATH} for features to load into the current global scope.
233
- <span class='line'>226</span> * Files loaded via this method will be added to {@link Kernel#$LOADED_FEATURES} and hence two
234
- <span class='line'>227</span> * consecutive calls to this method will not load and execute the code twice.
235
- <span class='line'>228</span> * @returns {Boolean} True if successful, false if the specified feature has already been required.
236
- <span class='line'>229</span> * @param {String} featurePath Full or relative path without the file extension to try and require.
237
- <span class='line'>230</span> * @throws {LoadError} Thrown when we can't find the specified feature in any directories specified
238
- <span class='line'>231</span> * in {@link Kernel#$LOAD_PATH}.
239
- <span class='line'>232</span> */</span><span class="WHIT">
240
- <span class='line'>233</span> </span><span class="NAME">require</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">feature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
241
- <span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">jsFeature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">feature</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".js"</span><span class="PUNC">;</span><span class="WHIT">
242
- <span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">$LOADED_FEATURES.indexOf</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
243
- <span class='line'>236</span> </span><span class="WHIT"> </span><span class="NAME">load</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
244
- <span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">$LOADED_FEATURES.push</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
245
- <span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
246
- <span class='line'>239</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
247
- <span class='line'>240</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
248
- <span class='line'>241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
249
- <span class='line'>242</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
250
- <span class='line'>243</span> </span><span class="PUNC">}</span><span class="PUNC">;</span></pre></body></html>
103
+ <span class='line'> 96</span> </span><span class="COMM">/**
104
+ <span class='line'> 97</span> * Returns the command line arguments this instance of the GRE was started with.
105
+ <span class='line'> 98</span> * NOTE: This doesn't play nicely with remoting to existing instances, but for now,
106
+ <span class='line'> 99</span> * we don't really care about that.
107
+ <span class='line'>100</span> * @returns {Array}
108
+ <span class='line'>101</span> */</span><span class="WHIT">
109
+ <span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">$ARGV</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
110
+ <span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@conflagrationjs.org/xpcomcore/generic-command-line-handler-clh;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">wrappedJSObject.args</span><span class="PUNC">;</span><span class="WHIT">
111
+ <span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
112
+ <span class='line'>105</span> </span><span class="WHIT">
113
+ <span class='line'>106</span> </span><span class="COMM">/**
114
+ <span class='line'>107</span> * Taking inspiration from Ruby, this defines the set of paths to check when
115
+ <span class='line'>108</span> * trying to load a file via either {@link Kernel#load} or {@link Kernel#require}.
116
+ <span class='line'>109</span> * @type Array
117
+ <span class='line'>110</span> */</span><span class="WHIT">
118
+ <span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">$LOAD_PATH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">XPCOMCoreConfig.getProperty</span><span class="PUNC">(</span><span class="STRN">'libRoot'</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
119
+ <span class='line'>112</span>
120
+ <span class='line'>113</span> </span><span class="WHIT"> </span><span class="COMM">/**
121
+ <span class='line'>114</span> * Taking inspiration from Ruby, this defines the currently loaded files that
122
+ <span class='line'>115</span> * have been loaded through {@link Kernel#require}.
123
+ <span class='line'>116</span> * @type Array
124
+ <span class='line'>117</span> */</span><span class="WHIT">
125
+ <span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">$LOADED_FEATURES</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"kernel.js"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
126
+ <span class='line'>119</span> </span><span class="WHIT">
127
+ <span class='line'>120</span> </span><span class="COMM">/**
128
+ <span class='line'>121</span> * Taking inspiration from Ruby, this method tries to determine the filesystem path to
129
+ <span class='line'>122</span> * the caller code of this method.
130
+ <span class='line'>123</span> * NOTE - when {@link Kernel} is mixed into an object, this function gets mixed in via
131
+ <span class='line'>124</span> * a special case behaviour that makes it a getter that actually calls the function
132
+ <span class='line'>125</span> * rather than returning the function object itself. This is to facilitate being able
133
+ <span class='line'>126</span> * to call '$CURRENT_FILE' in your code rather than '$CURRENT_FILE()'. The stackTraversalDepth
134
+ <span class='line'>127</span> * parameter is there for this reason, since we need to traverse the stack further than
135
+ <span class='line'>128</span> * normal to find the calling scope than we normally would.
136
+ <span class='line'>129</span> * @returns {String} The path to the current file
137
+ <span class='line'>130</span> * @param {int} stackTraversalDepth Optional argument, how far to look up the stack to
138
+ <span class='line'>131</span> * figure out who called us. The default is usually safe.
139
+ <span class='line'>132</span> * @throws {SelfConceptError} Thrown when we can't figure out what the filesystem
140
+ <span class='line'>133</span> * path to the current file is.
141
+ <span class='line'>134</span> */</span><span class="WHIT">
142
+ <span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">$CURRENT_FILE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
143
+ <span class='line'>136</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
144
+ <span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
145
+ <span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ioService</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/network/io-service;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">$Ci.nsIIOService</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
146
+ <span class='line'>139</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - UGH. This is so seedy.</span><span class="WHIT">
147
+ <span class='line'>140</span> </span><span class="WHIT"> </span><span class="COMM">// Traverse up the stack as far as needed to get our caller's stack frame. Sometimes we need to</span><span class="WHIT">
148
+ <span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">// traverse more than one level up, like when this function is actually called from a getter</span><span class="WHIT">
149
+ <span class='line'>142</span> </span><span class="WHIT"> </span><span class="COMM">// property that references it.</span><span class="WHIT">
150
+ <span class='line'>143</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callerStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Components.stack</span><span class="PUNC">;</span><span class="WHIT">
151
+ <span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
152
+ <span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">callerStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">callerStack.caller</span><span class="PUNC">;</span><span class="WHIT">
153
+ <span class='line'>146</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
154
+ <span class='line'>147</span> </span><span class="WHIT"> </span><span class="COMM">// Split based on the stupid fucking " -> " Gecko puts in the filename and get the last entry</span><span class="WHIT">
155
+ <span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ostensiblyUs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">callerStack.filename.split</span><span class="PUNC">(</span><span class="STRN">" -> "</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">slice</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
156
+ <span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">callerFileURI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ioService.newURI</span><span class="PUNC">(</span><span class="NAME">ostensiblyUs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
157
+ <span class='line'>150</span> </span><span class="WHIT"> </span><span class="COMM">// QI for an nsIFileURL which lets us get a handle on an actual file attribute and automagically does</span><span class="WHIT">
158
+ <span class='line'>151</span> </span><span class="WHIT"> </span><span class="COMM">// resource: URL resolution for us</span><span class="WHIT">
159
+ <span class='line'>152</span> </span><span class="WHIT"> </span><span class="NAME">callerFileURI.QueryInterface</span><span class="PUNC">(</span><span class="NAME">$Ci.nsIFileURL</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
160
+ <span class='line'>153</span> </span><span class="WHIT"> </span><span class="COMM">// And theoretically, we can now get a handle on an nsIFile and return the path of that.</span><span class="WHIT">
161
+ <span class='line'>154</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">callerFileURI.file.path</span><span class="PUNC">;</span><span class="WHIT">
162
+ <span class='line'>155</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
163
+ <span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SelfConceptError</span><span class="PUNC">(</span><span class="STRN">"The filesystem location of the current file could not be determined. -- "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
164
+ <span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
165
+ <span class='line'>158</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
166
+ <span class='line'>159</span> </span><span class="WHIT">
167
+ <span class='line'>160</span> </span><span class="COMM">/**
168
+ <span class='line'>161</span> * This method tries to determine the filesystem path to parent directory of the caller
169
+ <span class='line'>162</span> * code of this method NOTE - see the note on $CURRENT_FILE, as the same applies here.
170
+ <span class='line'>163</span> * @returns {String} The path to the current directory
171
+ <span class='line'>164</span> * @param {int} stackTraversalDepth Optional argument, how far to look up the stack to
172
+ <span class='line'>165</span> * figure out who called us. The default is usually safe.
173
+ <span class='line'>166</span> * @throws {SelfConceptError} Thrown when we can't figure out what the filesystem
174
+ <span class='line'>167</span> * path to the parent directory of the current file is.
175
+ <span class='line'>168</span> */</span><span class="WHIT">
176
+ <span class='line'>169</span> </span><span class="WHIT"> </span><span class="NAME">$CURRENT_DIRECTORY</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
177
+ <span class='line'>170</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stackTraversalDepth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
178
+ <span class='line'>171</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentFilePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Kernel.prototype.$CURRENT_FILE</span><span class="PUNC">(</span><span class="NAME">stackTraversalDepth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
179
+ <span class='line'>172</span> </span><span class="WHIT">
180
+ <span class='line'>173</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">XPCBuiltins.nsILocalFile</span><span class="PUNC">(</span><span class="NAME">currentFilePath</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
181
+ <span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">file.parent.path</span><span class="PUNC">;</span><span class="WHIT">
182
+ <span class='line'>175</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
183
+ <span class='line'>176</span> </span><span class="WHIT">
184
+ <span class='line'>177</span> </span><span class="COMM">/**
185
+ <span class='line'>178</span> * Returns a reference to an object allowing for get()/set() on environment variables.
186
+ <span class='line'>179</span> * @type nsIEnvironment
187
+ <span class='line'>180</span> */</span><span class="WHIT">
188
+ <span class='line'>181</span> </span><span class="WHIT">
189
+ <span class='line'>182</span> </span><span class="NAME">$ENV</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Components.classes</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/process/environment;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">Components.interfaces.nsIEnvironment</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
190
+ <span class='line'>183</span> </span><span class="WHIT">
191
+ <span class='line'>184</span> </span><span class="COMM">/**
192
+ <span class='line'>185</span> * Prints a string to standard out, without a trailing newline.
193
+ <span class='line'>186</span> * @param {String} str String to print to standard out.
194
+ <span class='line'>187</span> */</span><span class="WHIT">
195
+ <span class='line'>188</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
196
+ <span class='line'>189</span> </span><span class="WHIT"> </span><span class="NAME">dump</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
197
+ <span class='line'>190</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
198
+ <span class='line'>191</span> </span><span class="WHIT">
199
+ <span class='line'>192</span> </span><span class="COMM">/**
200
+ <span class='line'>193</span> * Prints a string to standard out, with a trailing newline.
201
+ <span class='line'>194</span> * @param {String} str String to print to standard out.
202
+ <span class='line'>195</span> */</span><span class="WHIT">
203
+ <span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">puts</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
204
+ <span class='line'>197</span> </span><span class="WHIT"> </span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
205
+ <span class='line'>198</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
206
+ <span class='line'>199</span> </span><span class="WHIT">
207
+ <span class='line'>200</span> </span><span class="COMM">/**
208
+ <span class='line'>201</span> * Searches {@link Kernel#$LOAD_PATH} for files to load into the current global scope.
209
+ <span class='line'>202</span> * Files loaded via this method will not be added to {@link Kernel#$LOADED_FEATURES} and hence
210
+ <span class='line'>203</span> * can be repeatedly loaded and executed.
211
+ <span class='line'>204</span> * @param {String} featurePath Full or relative path including file extension to try and load.
212
+ <span class='line'>205</span> * @returns {Boolean} True if the file was loaded succesfully
213
+ <span class='line'>206</span> * @throws {LoadError} Thrown when we can't find the specified file in any directories specified
214
+ <span class='line'>207</span> * in {@link Kernel#$LOAD_PATH}.
215
+ <span class='line'>208</span> */</span><span class="WHIT">
216
+ <span class='line'>209</span> </span><span class="WHIT"> </span><span class="NAME">load</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
217
+ <span class='line'>210</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/moz/jssubscript-loader;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getService</span><span class="PUNC">(</span><span class="NAME">$Ci.mozIJSSubScriptLoader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
218
+ <span class='line'>211</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">foundFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
219
+ <span class='line'>212</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - so this is kinda shitty. We have an empty entry here so we default to just trying to load </span><span class="WHIT">
220
+ <span class='line'>213</span> </span><span class="WHIT"> </span><span class="COMM">// from an absolute path</span><span class="WHIT">
221
+ <span class='line'>214</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$LOAD_PATH.concat</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">""</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
222
+ <span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">loadPathLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">loadPath.length</span><span class="PUNC">;</span><span class="WHIT">
223
+ <span class='line'>216</span> </span><span class="WHIT"> </span><span class="COMM">// FIXME - mozilla bug here. if i use foreach on array it ignores the granted security privileges</span><span class="WHIT">
224
+ <span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">loadPathLength</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
225
+ <span class='line'>218</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">potentialFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$Cc</span><span class="PUNC">[</span><span class="STRN">"@mozilla.org/file/local;1"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">createInstance</span><span class="PUNC">(</span><span class="NAME">$Ci.nsILocalFile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
226
+ <span class='line'>219</span> </span><span class="WHIT"> </span><span class="NAME">potentialFile.initWithPath</span><span class="PUNC">(</span><span class="NAME">loadPath</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
227
+ <span class='line'>220</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">potentialFile.exists</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
228
+ <span class='line'>221</span> </span><span class="NAME">foundFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">potentialFile</span><span class="PUNC">;</span><span class="WHIT">
229
+ <span class='line'>222</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
230
+ <span class='line'>223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
231
+ <span class='line'>224</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
232
+ <span class='line'>225</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">foundFile</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
233
+ <span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">foundFile.normalize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
234
+ <span class='line'>227</span> </span><span class="WHIT"> </span><span class="NAME">loader.loadSubScript</span><span class="PUNC">(</span><span class="STRN">"file://"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">encodeURI</span><span class="PUNC">(</span><span class="NAME">foundFile.path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
235
+ <span class='line'>228</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
236
+ <span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
237
+ <span class='line'>230</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">LoadError</span><span class="PUNC">(</span><span class="STRN">"no such file to load -- "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">featurePath</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
238
+ <span class='line'>231</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
239
+ <span class='line'>232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
240
+ <span class='line'>233</span>
241
+ <span class='line'>234</span> </span><span class="WHIT"> </span><span class="COMM">/**
242
+ <span class='line'>235</span> * Searches {@link Kernel#$LOAD_PATH} for features to load into the current global scope.
243
+ <span class='line'>236</span> * Files loaded via this method will be added to {@link Kernel#$LOADED_FEATURES} and hence two
244
+ <span class='line'>237</span> * consecutive calls to this method will not load and execute the code twice.
245
+ <span class='line'>238</span> * @returns {Boolean} True if successful, false if the specified feature has already been required.
246
+ <span class='line'>239</span> * @param {String} featurePath Full or relative path without the file extension to try and require.
247
+ <span class='line'>240</span> * @throws {LoadError} Thrown when we can't find the specified feature in any directories specified
248
+ <span class='line'>241</span> * in {@link Kernel#$LOAD_PATH}.
249
+ <span class='line'>242</span> */</span><span class="WHIT">
250
+ <span class='line'>243</span> </span><span class="NAME">require</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">feature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
251
+ <span class='line'>244</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">jsFeature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">feature</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".js"</span><span class="PUNC">;</span><span class="WHIT">
252
+ <span class='line'>245</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">$LOADED_FEATURES.indexOf</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
253
+ <span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">load</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
254
+ <span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">$LOADED_FEATURES.push</span><span class="PUNC">(</span><span class="NAME">jsFeature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
255
+ <span class='line'>248</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
256
+ <span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
257
+ <span class='line'>250</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
258
+ <span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
259
+ <span class='line'>252</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
260
+ <span class='line'>253</span> </span><span class="PUNC">}</span><span class="PUNC">;</span></pre></body></html>
@@ -389,7 +389,7 @@ invoke the command with.</dd>
389
389
  <!-- ============================== footer ================================= -->
390
390
  <div class="fineprint" style="clear:both">
391
391
 
392
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.2 on Sun Oct 11 2009 20:30:22 GMT-0500 (CDT)
392
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.2 on Tue Oct 13 2009 19:57:08 GMT-0500 (CDT)
393
393
  </div>
394
394
  </body>
395
395
  </html>
@@ -309,7 +309,7 @@ ul.inheritsList
309
309
  <!-- ============================== footer ================================= -->
310
310
  <div class="fineprint" style="clear:both">
311
311
 
312
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.2 on Sun Oct 11 2009 20:30:22 GMT-0500 (CDT)
312
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.3.2 on Tue Oct 13 2009 19:57:08 GMT-0500 (CDT)
313
313
  </div>
314
314
  </body>
315
315
  </html>