OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "include/dart_api.h" | 9 #include "include/dart_api.h" |
10 #include "include/dart_tools_api.h" | 10 #include "include/dart_tools_api.h" |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 } | 269 } |
270 return false; | 270 return false; |
271 } | 271 } |
272 | 272 |
273 | 273 |
274 static bool ProcessEnvironmentOption(const char* arg, | 274 static bool ProcessEnvironmentOption(const char* arg, |
275 CommandLineOptions* vm_options) { | 275 CommandLineOptions* vm_options) { |
276 ASSERT(arg != NULL); | 276 ASSERT(arg != NULL); |
277 if (*arg == '\0') { | 277 if (*arg == '\0') { |
278 // Ignore empty -D option. | 278 // Ignore empty -D option. |
279 Log::PrintErr("No arguments given to -D option\n"); | 279 Log::PrintErr("No arguments given to -D option, ignoring it\n"); |
280 return true; | 280 return true; |
281 } | 281 } |
282 if (environment == NULL) { | |
283 environment = new HashMap(&HashMap::SameStringValue, 4); | |
284 } | |
285 // Split the name=value part of the -Dname=value argument. | 282 // Split the name=value part of the -Dname=value argument. |
286 const char* equals_pos = strchr(arg, '='); | 283 const char* equals_pos = strchr(arg, '='); |
287 if (equals_pos == NULL) { | 284 if (equals_pos == NULL) { |
288 // No equal sign (name without value) currently not supported. | 285 // No equal sign (name without value) currently not supported. |
289 Log::PrintErr("No value given to -D option\n"); | 286 Log::PrintErr("No value given in -D%s option, ignoring it\n", arg); |
290 return false; | 287 return true; |
291 } | 288 } |
292 | 289 |
293 char* name; | 290 char* name; |
294 char* value = NULL; | 291 char* value = NULL; |
295 int name_len = equals_pos - arg; | 292 int name_len = equals_pos - arg; |
296 if (name_len == 0) { | 293 if (name_len == 0) { |
297 Log::PrintErr("No name given to -D option\n"); | 294 Log::PrintErr("No name given in -D%s option, ignoring it\n", arg); |
298 return false; | 295 return true; |
299 } | 296 } |
300 // Split name=value into name and value. | 297 // Split name=value into name and value. |
301 name = reinterpret_cast<char*>(malloc(name_len + 1)); | 298 name = reinterpret_cast<char*>(malloc(name_len + 1)); |
302 strncpy(name, arg, name_len); | 299 strncpy(name, arg, name_len); |
303 name[name_len] = '\0'; | 300 name[name_len] = '\0'; |
304 value = strdup(equals_pos + 1); | 301 value = strdup(equals_pos + 1); |
| 302 if (environment == NULL) { |
| 303 environment = new HashMap(&HashMap::SameStringValue, 4); |
| 304 } |
305 HashMap::Entry* entry = environment->Lookup( | 305 HashMap::Entry* entry = environment->Lookup( |
306 GetHashmapKeyFromString(name), HashMap::StringHash(name), true); | 306 GetHashmapKeyFromString(name), HashMap::StringHash(name), true); |
307 ASSERT(entry != NULL); // Lookup adds an entry if key not found. | 307 ASSERT(entry != NULL); // Lookup adds an entry if key not found. |
308 if (entry->value != NULL) { | 308 if (entry->value != NULL) { |
309 free(name); | 309 free(name); |
310 free(entry->value); | 310 free(entry->value); |
311 } | 311 } |
312 entry->value = value; | 312 entry->value = value; |
313 return true; | 313 return true; |
314 } | 314 } |
(...skipping 1583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1898 Platform::Exit(Process::GlobalExitCode()); | 1898 Platform::Exit(Process::GlobalExitCode()); |
1899 } | 1899 } |
1900 | 1900 |
1901 } // namespace bin | 1901 } // namespace bin |
1902 } // namespace dart | 1902 } // namespace dart |
1903 | 1903 |
1904 int main(int argc, char** argv) { | 1904 int main(int argc, char** argv) { |
1905 dart::bin::main(argc, argv); | 1905 dart::bin::main(argc, argv); |
1906 UNREACHABLE(); | 1906 UNREACHABLE(); |
1907 } | 1907 } |
OLD | NEW |